﻿
namespace KiMoCSys.core
{
    /// <summary>
    /// It contains the complete list of nodes that conforms one skeleton on the camera's view.
    /// Kinect only supports 20 joints or body points. Each Joint or body point is represented by a FrameSkeletonNode
    /// </summary>
    class FrameSkeleton
    {
        #region Private properties

        /// <summary>
        /// These are the list of nodes used by kinect.
        /// </summary>
        private FrameSkeletonNode headNode;
        private FrameSkeletonNode shoulderCenterNode;
        private FrameSkeletonNode shoulderLeftNode;
        private FrameSkeletonNode shoulderRightNode;
        private FrameSkeletonNode elbowLeftNode;
        private FrameSkeletonNode elbowRightNode;
        private FrameSkeletonNode wristLeftNode;
        private FrameSkeletonNode wristRightNode;
        private FrameSkeletonNode handLeftNode;
        private FrameSkeletonNode handRightNode;
        private FrameSkeletonNode spineNode;
        private FrameSkeletonNode hipCenterNode;
        private FrameSkeletonNode hipLeftNode;
        private FrameSkeletonNode hipRightNode;
        private FrameSkeletonNode kneeRightNode;
        private FrameSkeletonNode kneeLeftNode;
        private FrameSkeletonNode ankleRightNode;
        private FrameSkeletonNode ankleLeftNode;
        private FrameSkeletonNode footRightNode;
        private FrameSkeletonNode footLeftNode;

        #endregion
        
        #region Public properties
        public FrameSkeletonNode Head
        {
            set { headNode = value; }
            get { return headNode; }
        }

        public FrameSkeletonNode ShoulderCenter
        {
            set { shoulderCenterNode = value; }
            get { return shoulderCenterNode; }
        }

        public FrameSkeletonNode ShoulderLeft
        {
            set { shoulderLeftNode = value; }
            get { return shoulderLeftNode; }
        }

        public FrameSkeletonNode ShoulderRight
        {
            set { shoulderRightNode = value; }
            get { return shoulderRightNode; }
        }

        public FrameSkeletonNode ElbowLeft
        {
            set { elbowLeftNode = value; }
            get { return elbowLeftNode; }
        }

        public FrameSkeletonNode ElbowRight
        {
            set { elbowRightNode = value; }
            get { return elbowRightNode; }
        }

        public FrameSkeletonNode WristLeft
        {
            set { wristLeftNode = value; }
            get { return wristLeftNode; }
        }

        public FrameSkeletonNode WristRight
        {
            set { wristRightNode = value; }
            get { return wristRightNode; }
        }

        public FrameSkeletonNode HandLeft
        {
            set { handLeftNode = value; }
            get { return handLeftNode; }
        }

        public FrameSkeletonNode HandRight
        {
            set { handRightNode = value; }
            get { return handRightNode; }
        }

        public FrameSkeletonNode Spine
        {
            set { spineNode = value; }
            get { return spineNode; }
        }

        public FrameSkeletonNode HipCenter
        {
            set { hipCenterNode = value; }
            get { return hipCenterNode; }
        }

        public FrameSkeletonNode HipLeft
        {
            set { hipLeftNode = value; }
            get { return hipLeftNode; }
        }

        public FrameSkeletonNode HipRight
        {
            set { hipRightNode = value; }
            get { return hipRightNode; }
        }

        public FrameSkeletonNode KneeLeft
        {
            set { kneeLeftNode = value; }
            get { return kneeLeftNode; }
        }

        public FrameSkeletonNode KneeRight
        {
            set { kneeRightNode = value; }
            get { return kneeRightNode; }
        }

        public FrameSkeletonNode AnkleLeft
        {
            set { ankleLeftNode = value; }
            get { return ankleLeftNode; }
        }

        public FrameSkeletonNode AnkleRight
        {
            set { ankleRightNode = value; }
            get { return ankleRightNode; }
        }

        public FrameSkeletonNode FootLeft
        {
            set { footLeftNode = value; }
            get { return footLeftNode; }
        }

        public FrameSkeletonNode FootRight
        {
            set { footRightNode = value; }
            get { return footRightNode; }
        }
        #endregion
    }
}
